/* ==================================================================   
 * Created [2009-4-27 下午11:32:55] by Jon.King 
 * ==================================================================  
 * TSS 
 * ================================================================== 
 * mailTo:jinpujun@hotmail.com
 * Copyright (c) Jon.King, 2009-2012 
 * ================================================================== 
*/

package com.jinhe.tss.component.recycle.maintain;

import java.util.List;

import com.jinhe.tss.component.recycle.entity.Recycle;
import com.jinhe.tss.core.persistence.IDao;

/**
 * <p> IRecycleDao.java </p>
 * <p>
 * Recycle的Dao层的接口，负责所有Recycle相关的数据库操作接口
 * </p>
 */
public interface RecycleDao extends IDao<Recycle> {
    
    /**
     * 回收指定表名和回收站垃圾记录ID的结点。
     * 回收表中recycleId为同一垃圾记录ID的 所有记录
     * 
     * @param tableName
     * @param recycleId
     */
    public void recoverByRecycleId(String tableName, Long recycleId);

    /**
     * 回收指定表名和结点ID的实体记录
     * 
     * @param tableName
     * @param nodeId
     */
    public void recoverByEntityId(String tableName, Long nodeId);
    
    /**
     * 还原被删除节点的父结点
     * 
     * @param tableName
     * @param nodeId
     */
    public void recoverParent(String tableName, Long nodeId);
    
    /**
     * 根据表名和结点ID取出父结点ID和回收站ID
     * 
     * @param tableName
     * @param id
     * @return
     */
    public List<?> getParentNodes(String tableName, Long id);

    /**
     * 根据表名和回收站ID取结点
     * 
     * @param tableName
     * @param recycleId
     * @return
     */
    public List<?> getNodesByRecycleId(String tableName, Long recycleId);

    /**
     * 取得所有的回收站记录。
     * 如果该类型的实体是需要过滤权限信息的（根据是否有<pemission roleresourceoperation=""/>来判断），
     * 则根据配置的删除操作operationId来进行权限过滤。也就是说如果当前登陆用户对某一垃圾信息对应的实体没有
     * 删除权限的话就看不到该垃圾信息，也就无法进行物理删除或还原操作。
     * 
     * @param typeCode 垃圾类型
     * @return
     */
    public List<?> getRecycleList(Integer typeCode);
}